package com.abel.bigwater.dataserver.model.kming

import com.abel.bigwater.data.BcdString
import io.netty.buffer.Unpooled
import org.junit.Assert.*
import org.junit.Test

/**
 * 终端编码为 6 字节，其中 2 个字节字母+8 位 BCD 码。 8 位 BCD 的最高一位为 0，剩下表
示 7 位的流水号。例如水平旋翼 100m 口径脉冲远传水表流水号为 1234567，水表自编号为：
Lm1234567,终端编码为： 0x4C 0x6D 0x01 0x23 0x45 0x67。
 */
class TermCodeTypeTest {
    @Test
    fun testParse() {
        val buf = Unpooled.buffer().writeBytes(byteArrayOf(0x4C, 0x6D, 0x01, 0x23, 0x45, 0x67))

        val tc = TermCodeType()
        assertTrue("should parsed passed", tc.parseBuf(buf))
        assertEquals("Lm1234567", tc.fmt)
    }

    @Test
    fun testPack() {
        val tc = TermCodeType().apply {
            size = SizeType.Horizon100
            remote = RemoteType.PulseRemote
            codeBcd = BcdString.fromBcdString("01234567", false)
        }

        val buf = Unpooled.buffer().apply { tc.pack(this) }

        assertArrayEquals(byteArrayOf(0x4C, 0x6D, 0x01, 0x23, 0x45, 0x67),
                ByteArray(6).apply { buf.readBytes(this) })
    }
}